const { degrees, PDFDocument, rgb } = require('pdf-lib')
const fontkit = require('@pdf-lib/fontkit')
const path = require('node:path')
const fs = require('node:fs')

const FontPath =  path.join(process.env.windir, 'fonts')


module.exports.add_mark = async function( arg ){

    const pdfDoc = await PDFDocument.load( fs.readFileSync(arg.file))
 
    //3. 自定义字体，如不需要使用自定义字体可以将这一段全部注释掉，也不用下载自定义字体文件和自定义字体工具fontkit
    //将自己下载好的.ttf文件放置项目中，然后访问文件路径
    const fonturl = path.join(FontPath, arg.font)

    const fontBytes = fs.readFileSync(fonturl)
    // 自定义字体挂载、fontkit为自定义字体注册工具
    pdfDoc.registerFontkit(fontkit)

    const customFont = await pdfDoc.embedFont(fontBytes,{subset:true})

    // 内置字体（不支持中文）, 如果水印中不包含中文可直接用内置字体，本次这里没用到内置字体
    // const helveticaFont = await pdfDoc.embedFont(StandardFonts.Helvetica)

    //4. 添加水印
    //为每页pdf添加文字水印
    const pages = pdfDoc.getPages()
    for (let i = 0; i < pages.length; i++) {
        const noPage = pages[i]
        const { width, height } = noPage.getSize()
        if( arg.style ){ //居中
            noPage.drawText(arg.txt, {
                x: width / 2,
                y: height / 2,
                size: arg.size * 1,
                font: customFont,    //这里使用的是自定义字体
                //使用上面定义好的内置字体 font:helveticaFont 
                color: rgb(arg.color_ar[0]/255, arg.color_ar[1]/255, arg.color_ar[2]/255),
                rotate: degrees(arg.dg * 1),
                opacity: arg.color_ar[3] * 1,
            })
        }else {
            for (let i = 0; i < arg.h * 1; i++) {
                for (let j = 0; j < arg.l * 1; j++) {
                    noPage.drawText(arg.txt, {
                        x: arg.x * 1 + (width / arg.l) * j,
                        y: arg.y * 1 + (height / arg.h) * i,
                        size: arg.size * 1,
                        font: customFont,    //这里使用的是自定义字体
                        //使用上面定义好的内置字体 font:helveticaFont 
                        color: rgb(arg.color_ar[0]/255, arg.color_ar[1]/255, arg.color_ar[2]/255),
                        rotate: degrees(arg.dg * 1),
                        opacity: arg.color_ar[3] * 1,
                    })
                }
            }
        }

    }

    //5. 保存pdf文件的unit64Arrary文件流
    const pdfBytes = await pdfDoc.save();

    try {
        fs.accessSync(arg.sfile)
        return -1
    } catch (error) {
        fs.writeFileSync(arg.sfile, pdfBytes)
        return 1
    }

}

